//#include "wifi.h"
//#include "stm32f10x_usart.h"
//#include "stm32f10x_gpio.h"
//#include "stm32f10x_rcc.h"
//#include "uart.h"
//#include <string.h>
//#include <stdio.h>

//// ESP8266相关变量定义
//volatile uint8_t esp8266_rx_buffer[1024];
//volatile uint8_t esp8266_rx_index = 0;
//volatile uint8_t esp8266_connected = 0;
//volatile uint32_t systemTick = 0;

//void WIFI_USART2_Configuration(void)
//{
//    USART_InitTypeDef USART_InitStructure;
//    GPIO_InitTypeDef GPIO_InitStructure;
//    
//    // 开启USART2时钟和GPIOA时钟
//    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//    
//    // 配置GPIO
//    // PA2: USART2_TX -> ESP8266_RX
//    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//    GPIO_Init(GPIOA, &GPIO_InitStructure);
//    
//    // PA3: USART2_RX <- ESP8266_TX
//    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//    GPIO_Init(GPIOA, &GPIO_InitStructure);
//    
//    // 配置USART2
//    USART_InitStructure.USART_BaudRate = 115200;
//    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
//    USART_InitStructure.USART_StopBits = USART_StopBits_1;
//    USART_InitStructure.USART_Parity = USART_Parity_No;
//    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
//    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
//    USART_Init(USART2, &USART_InitStructure);
//    
//    USART_Cmd(USART2, ENABLE);
//}

//void SysTick_Init(void)
//{
//    if(SysTick_Config(SystemCoreClock / 1000))  // 1ms中断一次
//    {
//        while(1);
//    }
//}

//uint32_t GetSystemTick(void)
//{
//    return systemTick;
//}

//void ESP8266_ClearBuffer(void)
//{
//    esp8266_rx_index = 0;
//    memset((void*)esp8266_rx_buffer, 0, sizeof(esp8266_rx_buffer));
//}

//uint8_t ESP8266_WaitForResponse(char* expect, uint32_t timeout_ms)
//{
//    uint32_t startTime = GetSystemTick();
//    
//    while((GetSystemTick() - startTime) < timeout_ms)
//    {
//        if(strstr((char*)esp8266_rx_buffer, expect) != NULL)
//        {
//            return 1;
//        }
//        if(strstr((char*)esp8266_rx_buffer, "ERROR") != NULL)
//        {
//            return 0;
//        }
//        if(strstr((char*)esp8266_rx_buffer, "FAIL") != NULL)
//        {
//            return 0;
//        }
//        
//        // 短延时
//        for(volatile uint32_t i = 0; i < 1000; i++);
//    }
//    
//    return 0;
//}

//uint8_t ESP8266_SendCmdAndWait(char* cmd, char* expect, uint32_t timeout_ms)
//{
//    ESP8266_ClearBuffer();
//    
//    // 发送命令
//    for(uint16_t i = 0; i < strlen(cmd); i++)
//    {
//        while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
//        USART_SendData(USART2, cmd[i]);
//        
//        // 字符间小延时
//        for(volatile uint32_t j = 0; j < 100; j++);
//    }
//    
//    return ESP8266_WaitForResponse(expect, timeout_ms);
//}

//uint8_t ESP8266_TestBasicCommunication(void)
//{
//    USART_SendString(USART1, (uint8_t*)"[TEST] Testing basic ESP8266 communication...\r\n");
//    
//    // 清空缓冲区
//    ESP8266_ClearBuffer();
//    
//    // 发送AT命令
//    USART2_SendString((uint8_t*)"AT\r\n");
//    
//    // 等待一段时间让ESP8266响应
//    uint32_t startTime = GetSystemTick();
//    while((GetSystemTick() - startTime) < 5000)  // 等待5秒
//    {
//        // 如果有数据接收，立即显示
//        if(esp8266_rx_index > 0)
//        {
//            USART_SendString(USART1, (uint8_t*)"[TEST] SUCCESS: ESP8266 is responding!\r\n");
//            USART_SendString(USART1, (uint8_t*)"[TEST] Response: ");
//            USART_SendString(USART1, esp8266_rx_buffer);
//            USART_SendString(USART1, (uint8_t*)"\r\n");
//            return 1;
//        }
//        
//        // 短延时
//        for(volatile uint32_t i = 0; i < 1000; i++);
//    }
//    
//    USART_SendString(USART1, (uint8_t*)"[TEST] ERROR: No response from ESP8266\r\n");
//    USART_SendString(USART1, (uint8_t*)"[TEST] Please check:\r\n");
//    USART_SendString(USART1, (uint8_t*)"  1. ESP8266 TX -> STM32 PA3 (USART2_RX)\r\n");
//    USART_SendString(USART1, (uint8_t*)"  2. ESP8266 RX -> STM32 PA2 (USART2_TX)\r\n");
//    USART_SendString(USART1, (uint8_t*)"  3. ESP8266 power (3.3V, NOT 5V)\r\n");
//    USART_SendString(USART1, (uint8_t*)"  4. Common ground connection\r\n");
//    return 0;
//}

//void ESP8266_Init(void)
//{
//    USART_SendString(USART1, (uint8_t*)"[ESP8266] Starting initialization...\r\n");
//    
//    // 给ESP8266足够的上电时间
//    USART_SendString(USART1, (uint8_t*)"[ESP8266] Waiting for power stabilization (3 seconds)...\r\n");
//    for(volatile uint32_t i = 0; i < 0xFFFFFF; i++);
//    
//    // 首先测试基本通信
//    if(!ESP8266_TestBasicCommunication())
//    {
//        USART_SendString(USART1, (uint8_t*)"[ESP8266] CRITICAL: Cannot communicate with ESP8266\r\n");
//        return;
//    }
//    
//    // 设置WiFi模式为Station
//    USART_SendString(USART1, (uint8_t*)"[ESP8266] Setting WiFi mode to Station...\r\n");
//    if(ESP8266_SendCmdAndWait("AT+CWMODE=1\r\n", "OK", 5000))
//    {
//        USART_SendString(USART1, (uint8_t*)"[ESP8266] WiFi mode set successfully\r\n");
//    }
//    else
//    {
//        USART_SendString(USART1, (uint8_t*)"[ESP8266] WARNING: Setting WiFi mode failed\r\n");
//    }
//    
//    // 连接WiFi
//    USART_SendString(USART1, (uint8_t*)"[ESP8266] Connecting to WiFi...\r\n");
//    ESP8266_ClearBuffer();
//    USART2_SendString((uint8_t*)"AT+CWJAP=\"iPhone\",\"123456789\"\r\n");
//    
//    uint32_t startTime = GetSystemTick();
//    uint8_t connected = 0;
//    
//    while((GetSystemTick() - startTime) < 30000)  // 等待30秒
//    {
//        if(strstr((char*)esp8266_rx_buffer, "WIFI GOT IP") != NULL)
//        {
//            connected = 1;
//            USART_SendString(USART1, (uint8_t*)"[ESP8266] WiFi connection successful!\r\n");
//            break;
//        }
//        if(strstr((char*)esp8266_rx_buffer, "FAIL") != NULL)
//        {
//            USART_SendString(USART1, (uint8_t*)"[ESP8266] WiFi connection failed\r\n");
//            break;
//        }
//        
//        // 短延时
//        for(volatile uint32_t i = 0; i < 1000; i++);
//    }
//    
//    if(!connected)
//    {
//        USART_SendString(USART1, (uint8_t*)"[ESP8266] ERROR: WiFi connection timeout\r\n");
//        return;
//    }
//    
//    esp8266_connected = 1;
//    USART_SendString(USART1, (uint8_t*)"[ESP8266] Initialization complete!\r\n");
//}